// ---------- 蛇移动逻辑 ----------
void moveSnake() {
    // 1. 清除旧尾部
    gotoXY(snake.oldTailX, snake.oldTailY);
    cout << "  ";

    // 2. 更新身体坐标
    for (int i = snake.length - 1; i > 0; i--) {
        snake.x[i] = snake.x[i - 1];
        snake.y[i] = snake.y[i - 1];
    }

    // 3. 根据方向移动头部
    switch (snake.direction) {
        case 'U': snake.y[0]--; break; // 上
        case 'D': snake.y[0]++; break; // 下
        // ...其他方向...
    }

    // 4. 检测吃食物
    if (snake.x[0] == food.x && snake.y[0] == food.y) {
        snake.length++;
        score += level * 2;
        createFood();
    }
}

// ---------- 碰撞检测 ----------
bool checkCollision() {
    // 1. 撞墙检测
    if (snake.x[0] <= 0 || snake.x[0] >= WIDTH - 1 || /* ... */)
        return true;
    // 2. 自咬检测
    for (int i = 1; i < snake.length; i++) {
        if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i])
            return true;
    }
    return false;
}

// ---------- 输入处理 ----------
void handleInput() {
    if (_kbhit()) {
        int key = _getch();
        if (key == 0xE0) { // 方向键/F1/F2
            key = _getch();
            switch (key) {
                case 72: if (snake.direction != 'D') snake.direction = 'U'; break; // 上
                case 59: if (level < 10) level++; break; // F1加速
                // ...其他按键...
            }
        }
        else if (key == 27) gameover = true; // ESC退出
    }
}